package initialize

import (
	"fmt"
	_ "github.com/mbobakov/grpc-consul-resolver" // 注意一定需要这个模块，不然引入微服务会失败
	"go.uber.org/zap"
	"google.golang.org/grpc"
	"sale_system/order_srv/global"
	"sale_system/order_srv/proto"
)

func InitSrvConn() {

	ConsulInfo := global.ServerConfig.ConsulInfo

	// 从Consul中读取商品子服务的一台服务器
	goodsParam := fmt.Sprintf("consul://%s:%d/%s?wait=%s&tag=%s",
		ConsulInfo.Host, ConsulInfo.Port, global.ServerConfig.GoodsSrvInfo.Name, "14s", "goods")

	// 实现负载均衡  --- 取出一个链接
	connGoods, err := grpc.Dial(goodsParam, grpc.WithInsecure(),
		grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`)) // 实现RR轮转负载均衡

	if err != nil {
		zap.S().Fatal("通过Consul负载均衡获得连接失败：", zap.Error(err))
		return
	}
	global.GoodsSrvClient = proto.NewGoodsClient(connGoods)

	// 从Consul中读取商品子服务的一台服务器
	inventoryParam := fmt.Sprintf("consul://%s:%d/%s?wait=%s&tag=%s",
		ConsulInfo.Host, ConsulInfo.Port, global.ServerConfig.InventorySrvInfo.Name, "14s", "inventory")

	// 实现负载均衡  --- 取出一个链接
	connInventory, err := grpc.Dial(inventoryParam, grpc.WithInsecure(),
		grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`)) // 实现RR轮转负载均衡

	if err != nil {
		zap.S().Fatal("通过Consul负载均衡获得连接失败：", zap.Error(err))
		return
	}
	global.InventorySrvClient = proto.NewInventoryClient(connInventory)

}
